// 工具库

// 导入加密模块
let crypto=require('crypto');

// 导入发邮件模块
let nodemailer=require('nodemailer');

// 导入jsonwebtoken模块
let jsonwebtoken=require('jsonwebtoken');

// 导入文件系统模块
let fs=require('fs');
const { resolve } = require('path');
const { rejects } = require('assert');

// 创建发邮件配置
let transporter=nodemailer.createTransport({
  host:"smtp.qq.com",  //主机
  port:465,            //端口
  secure:true,         //当端口为465时
  auth:{               //身份授权
    user:'463092409@qq.com',  //发邮件地址
    pass:'usbwvzqbforucaia'   //授权码
  }
});

class Uitls{
  // 加密字符串
  encodeString(value){
    let md5=crypto.createHash('md5');
    return md5.update(value).digest('hex')
  }
  // 发邮件
  sendEmail(emails,code,fn){
    // emails:String 
    transporter.sendMail({
      from:'463092409@qq.com',  //发件地址
      to: emails,               //收件地址
      subject:'邮箱验证码',       //主题
      text:`邮箱验证码为${code},5分钟内有效!`
    },fn)
  }
  // 生成token
  signToken(value,expires){
    // value:生成token的字符串
    // 过期时间expires写法
    // 60==>60s
    // '100'==>'100ms'
    // '2 days'==>'2天'
    // '10h'==>'10小时'
    // '7 days'==>'7天'
    return jsonwebtoken.sign(
      {data:value},
      config.saltOptions.tokenSalt,
      {expiresIn:expires}
    )
  }
  // 解析token
  verifyToken(value,fn){
    // value:被生成的token的字符串
    // fn:回调函数
    jsonwebtoken.verify(value,config.saltOptions.tokenSalt,fn)
  }
  // 上传图片
  uploadImg(file){
    // file.type:文件类型
    // file.base64:图片base64
    return new Promise((resolve,reject)=>{
      // 将base64转成二进制文件
      let buffer=Buffer.from(file.base64,'base64');
      // 生成文件名
      let filename="_u"+Math.random().toString().slice(2)+"."+file.type
      // 写入服务器
      fs.writeFile(__basename+"/upload/"+filename,buffer,(err)=>{
        // 如果上传失败
        if(err){
          reject({message:"上传失败",code:204});
        }else{
          resolve({message:"上传成功",code:200,filename})
        }
      })
    })
  }
}

// 导出
module.exports=new Uitls();